package org.footito.android.tools;

import java.io.IOException;

public class Log {

	/**
	 * 0 == none, 1 == LogCat, 2 == File
	 */
	private static int MODE = 1;

	private static final String TAG = "footito";

	public static void e(String msg) {
		if (!DevParameters.isLogEnable())
			return ;
		else
			getInstance().e2(msg);
	}

	public static void e(Exception e) {
		if (!DevParameters.isLogEnable())
			return ;
		else
			getInstance().e2(e);
	}

	public static void i(String msg) {
		if (!DevParameters.isLogEnable())
			return ;
		else
			getInstance().i2(msg);
	}

	public static void v(String msg) {
		if (!DevParameters.isLogEnable())
			return ;
		else
			getInstance().v2(msg);
	}

	public static void w(String msg) {
		if (!DevParameters.isLogEnable())
			return ;
		else
			getInstance().w2(msg);
	}

	private FileLogger filelogger;

	private static Log instance;

	public static void d(String msg) {
		getInstance().d2(msg);
	}

	private static Log getInstance() {
		if (instance == null)
			instance = new Log();
		return instance;
	}

	private Log() {
		try {
			filelogger = new FileLogger("/footito", TAG);
		} catch (IOException e) {
			android.util.Log.e("Footito", "IOException: " + e.getMessage());
			MODE = 1;
		}
	}

	private void d2(String msg) {
		switch (MODE) {
		case 1:
			android.util.Log.d(TAG, msg);
			break;
		case 2:
			filelogger.d(TAG, msg);
			break;

		default:
			break;
		}
	}

	private void e2(String msg) {
		switch (MODE) {
		case 1:
			android.util.Log.e(TAG, msg);
			break;
		case 2:
			filelogger.e(TAG, msg);
			break;

		default:
			break;
		}
	}

	private void e2(Exception e) {
		switch (MODE) {
		case 1:
			android.util.Log.e(TAG, e.getMessage(), e);
			break;
		case 2:
			filelogger.e(TAG, e);
			break;

		default:
			break;
		}
	}

	private void i2(String msg) {
		switch (MODE) {
		case 1:
			android.util.Log.i(TAG, msg);
			break;
		case 2:
			filelogger.i(TAG, msg);
			break;

		default:
			break;
		}
	}

	private void v2(String msg) {
		switch (MODE) {
		case 1:
			android.util.Log.v(TAG, msg);
			break;
		case 2:
			filelogger.v(TAG, msg);
			break;

		default:
			break;
		}
	}

	private void w2(String msg) {
		switch (MODE) {
		case 1:
			android.util.Log.w(TAG, msg);
			break;
		case 2:
			filelogger.w(TAG, msg);
			break;

		default:
			break;
		}
	}
}
